home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / BINARY.I < prev    next >
Encoding:
Text File  |  1990-10-01  |  8.8 KB  |  3 lines

  1. ⓪ IMPLEMENTATION MODULE Binary; (* V#041 *)⓪ (*$L-,R-*)⓪ (*$Y+*)⓪ ⓪ (*⓪"28.5.88 tt  Überflüssiges MOVEQ #0,D2 am Ende v. 'write' entfernt⓪"3.7.88  tt  Bei write mit null Bytes wird A3 korrekt abgeräumt;⓪.bei Seek wird auch richtig expandiert, wenn FilePos beim⓪.Aufruf nicht am Fileende ist.⓪"6.5.90  tt  Read/WriteLargeBlock neu⓪ *)⓪ ⓪ FROM FileBase IMPORT Unit, UDataProc, UCloseProc, UFlushProc, URStrProc,⓪(UWStrProc, UGChrProc;⓪ ⓪ FROM Files IMPORT File, Access, @CheckState;⓪ ⓪ FROM SYSTEM IMPORT ASSEMBLER, BYTE, WORD, LONGWORD, ADDRESS, ADR;⓪ ⓪ IMPORT MOSGlobals;⓪ ⓪ (*$I FileDesc.Icl *)⓪ ⓪ (*$O+*)⓪ TYPE File = POINTER TO FileDesc;⓪ (*$O-*)⓪ ⓪ ⓪ PROCEDURE ErrHandler;⓪"BEGIN⓪$ASSEMBLER⓪(MOVE.L  A0,(A3)+⓪(JSR     @CheckState⓪(TST     -(A3)⓪(BEQ     e0⓪(CLR     File.state(A0)⓪%e0 CLR     D0⓪$END⓪"END ErrHandler;⓪ ⓪ PROCEDURE CheckAccess;⓪"BEGIN⓪$ASSEMBLER⓪(TST     -(A3)⓪(BEQ     rf⓪(CMPI    #2,File.accmode(A0)⓪(BLS     rt⓪(MOVE    #MOSGlobals.fBadOp,File.state(A0)⓪(JMP     ErrHandler⓪%rf RTS⓪%rt MOVEQ   #1,D0⓪$END⓪"END CheckAccess;⓪ ⓪ ⓪ PROCEDURE FileSize (f: File): LONGCARD;⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(JSR     @CheckState⓪(JSR     CheckAccess⓪(UNLK    A5⓪(BEQ     r0⓪(MOVE.L  File.len(A0),(A3)+⓪(RTS⓪%r0 CLR.L   (A3)+⓪$END⓪"END FileSize;⓪ ⓪ ⓪ PROCEDURE FilePos (f: File): LONGCARD;⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(JSR     @CheckState⓪(JSR     CheckAccess⓪(UNLK    A5⓪(BEQ     r0⓪(MOVE.L  File.pos(A0),(A3)+⓪(RTS⓪%r0 CLR.L   (A3)+⓪$END⓪"END FilePos;⓪ ⓪ ⓪ PROCEDURE write (f:File; start: ADDRESS; len: LONGCARD);⓪"BEGIN⓪$ASSEMBLER⓪(MOVE.L  -12(A3),(A3)+⓪(JSR     @CheckState⓪(TST     -(A3)⓪(BEQ     err⓪(MOVE    File.accmode(A0),D0⓪(BEQ     badAcc⓪(CMPI    #2,D0⓪(BHI     badOp⓪ ⓪(MOVE.L  -(A3),D0                ; LEN⓪(BEQ     ok0⓪(MOVE.L  -(A3),-(A7)             ; START⓪(MOVE.L  D0,-(A7)⓪(MOVE    File.handle(A0),-(A7)⓪(MOVE    #$40,-(A7)⓪(TRAP    #1⓪(ADDQ.L  #4,A7⓪(MOVE.L  (A7)+,D1                ; LEN⓪(ADDQ.L  #4,A7⓪(MOVE.L  -(A3),A0⓪(MOVE    #1,File.modified(A0)⓪(TST.L   D0⓪(BPL     ok⓪(MOVE    D0,File.state(A0)⓪(UNLK    A5⓪(RTS⓪'ok0:⓪(SUBQ.L  #8,A3⓪(UNLK    A5⓪(RTS⓪ ⓪'badOp:⓪(MOVE    #MOSGlobals.fBadOp,D0⓪(BRA     errH⓪'badAcc:⓪(MOVE    #MOSGlobals.fBadAccess,D0⓪'errH:⓪(MOVE    D0,File.state(A0)⓪(MOVE.L  A0,(A3)+⓪(JSR     ErrHandler⓪'err:⓪(SUBA.W  #12,A3⓪(UNLK    A5⓪(RTS⓪ ⓪'full:⓪(MOVE    #MOSGlobals.fDiskFull,File.state(A0)⓪(UNLK    A5⓪(RTS⓪ ⓪'ok:⓪(CMP.L   D0,D1⓪(BHI     full⓪(ADD.L   D1,File.pos(A0)⓪(MOVE.L  File.pos(A0),D0⓪(CMP.L   File.len(A0),D0⓪(BCS     end⓪(MOVE.L  D0,File.len(A0)⓪'end:⓪(UNLK    A5⓪$END⓪"END write;⓪ ⓪ PROCEDURE seek0;⓪"BEGIN⓪$ASSEMBLER⓪(MOVE.W  D3,-(A7)⓪(MOVE.W  File.handle(A4),-(A7)⓪(MOVE.L  D4,-(A7)⓪(MOVE    #$42,-(A7)⓪(TRAP    #1⓪(ADDA.W  #10,A7⓪$END⓪"END seek0;⓪ ⓪ PROCEDURE Seek (f: File; offset : LONGINT; base: SeekMode);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVEM.L D3-D5/A4,-(A7)⓪(MOVE.W  -(A3),D3        ; base⓪(MOVE.L  -(A3),D4        ; offset⓪(JSR     @CheckState⓪(JSR     CheckAccess⓪(MOVE.L  A0,A4           ; f⓪(BEQ.L   end⓪(⓪(; r := seek (offset,f^.handle,base);⓪(JSR     seek0⓪(TST.L   D0⓪(BPL.L   noErr⓪(⓪(CMPI.W  #-64,D0⓪(BNE.L   genErr⓪(TST     File.accmode(A4)⓪(BEQ.L   genErr⓪(⓪(; Seek ans Ende⓪(MOVE.L  D4,D5⓪(SWAP    D3⓪(MOVEQ   #0,D4⓪(MOVE    #fromEnd,D3⓪(JSR     seek0⓪(TST.L   D0⓪(BMI.L   genErr⓪(SWAP    D3⓪(MOVE.L  D5,D4⓪(⓪(MOVE.L  File.len(A4),D5         ; len⓪(CMP.L   D5,D0⓪(BNE.L   interr          ; -> Fehler: len und seek-Pos nicht gleich⓪(⓪(CMPI    #1,D3⓪(BEQ     frPos⓪(BCS     frBeg⓪(ADD.L   D5,D4⓪&frPos⓪(ADD.L   File.pos(A4),D4⓪&frBeg⓪(⓪(CMP.L   D5,D4⓪(BLS     noExp⓪(⓪(SUB.L   D4,D5⓪(NEG.L   D5⓪(⓪%l0 MOVE.L  A4,(A3)+⓪(MOVE.L  #$8000,(A3)+⓪(CMPI.L  #$4000,D5⓪(BLS     t2⓪(MOVE.L  #$4000,D0⓪(BRA     t3⓪%t2 MOVE.L  D5,D0⓪%t3 MOVE.L  D0,(A3)+⓪(PEA     rtnadr(PC)⓪(LINK    A5,#0⓪(JMP     write⓪%rtnadr:⓪(TST     File.state(A4)⓪(BMI     end⓪(SUB.L   #$4000,D5⓪(BGT     l0⓪(⓪(CLR     D3              ; base:= fromBegin⓪(JSR     seek0⓪(⓪&noExp:⓪(TST.L   D0⓪(BPL     noErr⓪(⓪&genErr:⓪(MOVE    D0,File.state(A4)⓪(BRA     end⓪(⓪&interr⓪(MOVE    #MOSGlobals.fInternalErr1,D0⓪(BRA     genErr⓪(⓪&noErr:⓪(MOVE.L  D0,File.pos(A4)⓪(CMP.L   File.len(A4),D0⓪(BLS     end⓪(MOVE.L  D0,File.len(A4)⓪(⓪&end:⓪(MOVEM.L (A7)+,D3-D5/A4⓪(UNLK    A5⓪$END⓪"END Seek;⓪ ⓪ ⓪ PROCEDURE read;⓪"BEGIN⓪$ASSEMBLER⓪(MOVEM.L D1/D2/A0,-(A7)⓪(MOVE    File.handle(A0),-(A7)⓪(MOVE    #$3F,-(A7)⓪(TRAP    #1⓪(ADDQ.L  #4,A7⓪(MOVEM.L (A7)+,D1/D2/A0  ; len / * / f⓪(TST.L   D0⓪(BPL     ok⓪(MOVE    D0,File.state(A0)⓪(UNLK    A5⓪(RTS⓪'ok⓪(ADD.L   D1,File.pos(A0)⓪'end⓪(UNLK    A5⓪$END⓪"END read;⓪ ⓪ PROCEDURE rd_prep;⓪"BEGIN⓪$ASSEMBLER⓪(MOVE.L  D1,D0⓪(ADD.L   File.pos(A0),D0⓪(CMP.L   File.len(A0),D0⓪(BHI     t0⓪(JMP     read⓪%t0 MOVE    #MOSGlobals.fEndOfFile,File.state(A0)⓪(MOVE.L  File.pos(A0),D0⓪(CMP.L   File.len(A0),D0⓪(BCS     e0⓪(JSR     ErrHandler⓪%e0⓪$END⓪"END rd_prep;⓪ ⓪ PROCEDURE ReadByte (f: File; VAR byte: BYTE);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -(A3),-(A7)⓪(JSR     @CheckState⓪(JSR     CheckAccess⓪(BEQ     e0⓪(MOVE.L  (A7)+,D2        ; start⓪(MOVEQ   #1,D1           ; len⓪(JSR     rd_prep⓪%e0 UNLK    A5⓪$END⓪"END ReadByte;⓪ ⓪ PROCEDURE ReadWord (f: File; VAR word: WORD);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -(A3),-(A7)⓪(JSR     @CheckState⓪(JSR     CheckAccess⓪(BEQ     e0⓪(MOVE.L  (A7)+,D2        ; start⓪(MOVEQ   #2,D1           ; len⓪(JSR     rd_prep⓪%e0 UNLK    A5⓪$END⓪"END ReadWord;⓪ ⓪ PROCEDURE ReadLong (f: File; VAR long: LONGWORD);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -(A3),-(A7)⓪(JSR     @CheckState⓪(JSR     CheckAccess⓪(BEQ     e0⓪(MOVE.L  (A7)+,D2        ; start⓪(MOVEQ   #4,D1           ; len⓪(JSR     rd_prep⓪%e0 UNLK    A5⓪$END⓪"END ReadLong;⓪ ⓪ PROCEDURE ReadBlock (f: File; VAR block: ARRAY OF BYTE);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.W  -(A3),-(A7)⓪(MOVE.L  -(A3),-(A7)⓪(JSR     @CheckState⓪(JSR     CheckAccess⓪(BEQ     e0⓪(MOVE.L  (A7)+,D2        ; start⓪(MOVEQ   #0,D1⓪(MOVE.W  (A7)+,D1        ; HIGH⓪(ADDQ.L  #1,D1⓪(JSR     rd_prep⓪%e0 UNLK    A5⓪$END⓪"END ReadBlock;⓪ ⓪ PROCEDURE ReadLargeBlock (f: File; VAR block: LONGARRAY OF BYTE);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -(A3),-(A7)⓪(MOVE.L  -(A3),-(A7)⓪(JSR     @CheckState⓪(JSR     CheckAccess⓪(BEQ     e0⓪(MOVE.L  (A7)+,D2        ; start⓪(MOVE.L  (A7)+,D1        ; HIGH⓪(ADDQ.L  #1,D1⓪(JSR     rd_prep⓪%e0 UNLK    A5⓪$END⓪"END ReadLargeBlock;⓪ ⓪ PROCEDURE ReadBytes (    f        : File;⓪9addr     : ADDRESS;⓪9bytes    : LONGCARD;⓪5VAR bytesRead: LONGCARD);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -(A3),-(A7)     ; bytesRead⓪(MOVE.L  -(A3),-(A7)⓪(MOVE.L  -(A3),-(A7)⓪(JSR     @CheckState⓪(JSR     CheckAccess⓪(BEQ     e0⓪(MOVE.L  (A7)+,D2        ; addr⓪(MOVE.L  (A7)+,D1        ; bytes⓪(MOVE.L  (A7)+,A1        ; bytesRead⓪(MOVE.L  File.len(A0),D0⓪(SUB.L   File.pos(A0),D0⓪(CMP.L   D0,D1⓪(BLS     t0⓪(MOVE.L  D0,D1⓪%t0 MOVE.L  D1,(A1)⓪(JMP     read⓪%e0 UNLK    A5⓪$END⓪"END ReadBytes;⓪ ⓪ ⓪ PROCEDURE WriteByte (f: File; byte: BYTE);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.W  -(A3),-(A7)⓪(MOVE.L  A7,(A3)+⓪(MOVEQ   #1,D0⓪(MOVE.L  D0,(A3)+⓪(JMP     write⓪$END⓪"END WriteByte;⓪ ⓪ PROCEDURE WriteWord (f: File; word: WORD);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.W  -(A3),-(A7)⓪(MOVE.L  A7,(A3)+⓪(MOVEQ   #2,D0⓪(MOVE.L  D0,(A3)+⓪(JMP     write⓪$END⓪"END WriteWord;⓪ ⓪ PROCEDURE WriteLong (f: File; long: LONGWORD);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVE.L  -(A3),-(A7)⓪(MOVE.L  A7,(A3)+⓪(MOVEQ   #4,D0⓪(MOVE.L  D0,(A3)+⓪(JMP     write⓪$END⓪"END WriteLong;⓪ ⓪ PROCEDURE WriteBlock (f: File; REF block: ARRAY OF BYTE);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(MOVEQ   #0,D0⓪(MOVE.W  -(A3),D0⓪(ADDQ.L  #1,D0⓪(MOVE.L  D0,(A3)+⓪(JMP     write⓪$END⓪"END WriteBlock;⓪ ⓪ PROCEDURE WriteLargeBlock (f: File; REF block: LONGARRAY OF BYTE);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(ADDQ.L  #1,-4(A3)⓪(JMP     write⓪$END⓪"END WriteLargeBlock;⓪ ⓪ PROCEDURE WriteBytes (f: File; addr: ADDRESS; bytes: LONGCARD);⓪"BEGIN⓪$ASSEMBLER⓪(LINK    A5,#0⓪(JMP     write⓪$END⓪"END WriteBytes;⓪ ⓪ END Binary.⓪ ə
  2. (* $00001B3D$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$000002CB$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDA$FFFD5CDAÇ$00000259T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$00001FA8$00000A99$000020C8$FFF0C822$FFF0C822$00000838$00000259$FFED095D$00000BB8$0000146B$0000158B$000016AF$000017DA$000018DE$00001A3C$00002052£Çâ*)
  3.